package demo;

import com.kayak.enve.EnvApplication;
import com.kayak.sign.CertUtil;
import com.kayak.sign.KKAES2;
import com.kayak.sign.SignVer;

public class Demo {
    public static void main(String[] args) throws Exception {
        //商户私钥
        String skey = "D:/huaxiaBankCert/ruipugene.jks";
        //商户私钥密码
        String password = "yh1RRPNg5W75bNEW";
        //银行公钥证书
        String hxkey = "D:/huaxiaBankCert/huaxiapublickey.cer";
        EnvApplication envApplication = new EnvApplication();
        String cert = envApplication.getCert(hxkey);
        //CA根证书
        String CAkey = "D:/huaxiaBankCert/ca.cer";
        //-------------------------------------------
        //解析求情报文
        //报文密文 body内容
        String sbody = "xxxxbody";
        //签名 signature内容
        String signed = "xxxxsign";
        //校验证书合法性
        CertUtil.verifyCA(CAkey, hxkey);
        //1 解密：商户使用自己的私钥进行解密
        // 参数说明：(1)商户私钥(jks文件)；(2)密钥口令；(3)待解密内容(请求body内容)
        byte[] decryption = envApplication.openEnvelope(skey, password, sbody);
        String body = new String(decryption, "utf-8");
        System.out.println("数字信封解密结果:" + body);
        //2 验签:商户使用综合支付的公钥验签
        // 参数说明：(1)原文(请求body内容)；(2)待验签数据(signature内容)；(3)综合支付的公钥
        boolean doCheck = SignVer.verifyJson(body, signed, hxkey);
        System.out.println("验签结果:" + doCheck);
        //3 商户 业务处理
        // body明文json串
        String retBody = "xxx";
        //4 签名:商户使用自己的私钥签名
        // 参数说明：(1)待签名数据(响应body内容)；(2)商户的私钥；(3)密钥口令；
        String retSigned = SignVer.signJson(retBody, skey, password);
        System.out.println("签名数据:" + retSigned);
        //5 加密:商户使用综合支付的公钥进行加密
        // 参数说明：(1)银行公钥证书；(2)对称算法AES(固定)；(3)待加密内容
        String sRetBody = envApplication.makeEnvelope(cert, KKAES2.AES, retBody.getBytes("UTF-8"));
        System.out.println("数字信封加密结果:" + sRetBody);
        //6 返回报文
        //{"version":"1.0","appid":"xx","signature":"retSigned", "body":"sRetBody"}
    }
}
